﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqlSugar.Template.Extensions
{
    public static class PaginationHelper
    {
        /// <summary>
        /// 对给定的列表进行分页。
        /// </summary>
        /// <typeparam name="T">列表中的元素类型。</typeparam>
        /// <param name="list">要分页的列表。</param>
        /// <param name="pageNumber">请求的页码（从1开始）。</param>
        /// <param name="pageSize">每页的元素数量。</param>
        /// <returns>包含当前页元素的列表。</returns>
        public static List<T> Paginate<T>(List<T> list, int pageNumber, int pageSize)
        {
            if (list == null) throw new ArgumentNullException(nameof(list));
            if (pageNumber < 1) throw new ArgumentOutOfRangeException(nameof(pageNumber), "页码必须大于或等于1。");
            if (pageSize < 1) throw new ArgumentOutOfRangeException(nameof(pageSize), "每页的元素数量必须大于或等于1。");

            int totalItems = list.Count;
            int totalPages = (int)Math.Ceiling(totalItems / (double)pageSize);

            // 确保请求的页码在有效范围内
            if (pageNumber > totalPages)
            {
                pageNumber = totalPages;
            }

            // 计算当前页的开始索引和结束索引
            int startIndex = (pageNumber - 1) * pageSize;
            int endIndex = Math.Min(startIndex + pageSize, totalItems);

            // 返回当前页的元素
            return list.GetRange(startIndex, endIndex - startIndex);
        }
    }
}
